home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_01 / saks / override.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-07  |  1.0 KB  |  57 lines

  1. Listing 6 - Selective virtual overriding
  2.  
  3. #include <iostream.h>
  4.  
  5. class B
  6.     {
  7. public:
  8.     virtual void f();
  9.     virtual void g();
  10.     virtual void h();
  11.     };
  12.  
  13. class C : public B
  14.     {
  15. public:
  16.     void f();           // virtual
  17.     };
  18.  
  19. class D : public C
  20.     {
  21. public:
  22.     void h();           // virtual
  23.     };
  24.  
  25. void B::f() { cout << "B::f()\n"; }
  26.  
  27. void B::g() { cout << "B::g()\n"; }
  28.  
  29. void B::h() { cout << "B::h()\n"; }
  30.  
  31. void C::f() { cout << "C::f()\n"; }
  32.  
  33. void D::h() { cout << "D::h()\n"; }
  34.  
  35. int main()
  36.     {
  37.     C c;
  38.     D d;
  39.  
  40.     B *pb = &c;         // ok, &c is a C * which is a B *
  41.     pb->f();            // calls C::f()
  42.     pb->g();            // calls B::g()
  43.     pb->h();            // calls B::h()
  44.  
  45.     C *pc = &d;         // ok, &d is a D * which is a C *
  46.     pc->f();            // calls C::f()
  47.     pc->g();            // calls B::g()
  48.     pc->h();            // calls D::h()
  49.  
  50.     B &rb = *pc;        // ok, *pc is a C which is a B
  51.     rb.f();             // calls C::f()
  52.     rb.g();             // calls B::g()
  53.     rb.h();             // calls D::h()
  54.  
  55.     return 0;
  56.     }
  57.